import jxl.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.StringTokenizer;

public class Producciones {
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	static boolean producciones(ArrayList<Token> pila, Token cima, Token tokenEntrada, ArrayList<Pair<Integer>> parse) {
		boolean encontradoFila = false; boolean encontradoColumna = false;
		boolean error = false;

		try {
			Workbook archivoExcel = Workbook.getWorkbook(new File(".\\Producciones\\tabla.xls"));
		
				Sheet hoja = archivoExcel.getSheet(0);
				int numColumnas = hoja.getColumns();
				int numFilas = hoja.getRows();
				int fila = 0; int columna = 0;;
				String data;

				
				while (fila < numFilas && encontradoFila == false) {
					
					if ((cima.lexema.toString().equals(hoja.getCell(0, fila).getContents()))){
						encontradoFila = true;
					}
					fila++;
				}
				
				while (columna < numColumnas && encontradoColumna == false) { 

					if ((tokenEntrada.lexema.toString().equals(hoja.getCell(columna, 0).getContents()))){
						encontradoColumna = true;
					}
					columna++;
				}
				
			
				if (encontradoFila && encontradoColumna){
					parse.add(new Pair(columna-1, fila-1));
					data = hoja.getCell(columna-1, fila-1).getContents(); 

					if (data.equals("")){
						error = true;
					}else{

						if (data.equals("EMPTY")){
							error = false;	
						}else{
							StringTokenizer simbolos = new StringTokenizer(data, " \n\r");
                            String simbolo;
                            ArrayList<Token> produccion = new ArrayList<Token>();
                            Token t;
                            
                            while (simbolos.hasMoreTokens()){
                                    simbolo = simbolos.nextToken();
                                
                                    	t = new Token(Simbolos.valueOf(simbolo), null);
                                
                                    produccion.add(t);
                            }
					        pila.addAll(0,produccion);
					        error = false;
						}
					}
				}else
					error = true;
				
				
		} catch (Exception ioe) {
			ioe.printStackTrace();
		}
		return error;
	}

	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	static boolean producciones(ArrayList<Token> pila, Token cima, Token tokenEntrada) {
		boolean encontradoFila = false; boolean encontradoColumna = false;
		boolean error = false;

		try {
			Workbook archivoExcel = Workbook.getWorkbook(new File(".\\Producciones\\tablaSemantica.xls"));
		
				Sheet hoja = archivoExcel.getSheet(0);
				int numColumnas = hoja.getColumns();
				int numFilas = hoja.getRows();
				int fila = 0; int columna = 0;;
				String data;

				
				while (fila < numFilas && encontradoFila == false) {
					
					if ((cima.lexema.toString().equals(hoja.getCell(0, fila).getContents()))){
						encontradoFila = true;
					}
					fila++;
				}
				
				while (columna < numColumnas && encontradoColumna == false) { 

					if ((tokenEntrada.lexema.toString().equals(hoja.getCell(columna, 0).getContents()))){
						encontradoColumna = true;
					}
					columna++;
				}
				
			
				if (encontradoFila && encontradoColumna){
					data = hoja.getCell(columna-1, fila-1).getContents(); 

					if (data.equals("")){
						error = true;
					}else{

						if (data.equals("EMPTY")){
							error = false;	
						}else{
							StringTokenizer simbolos = new StringTokenizer(data, " \n\r");
                            String simbolo;
                            ArrayList<Token> produccion = new ArrayList<Token>();
                            Token t;int i=0;
                            
                            while (simbolos.hasMoreTokens()){
                                simbolo = simbolos.nextToken();
                                
                            	t = new Token(Simbolos.valueOf(simbolo), null);
                        
                            produccion.add(t);
                    }
					        pila.addAll(0,produccion);
					        error = false;
						}
					}
				}else
					error = true;
				
				
		} catch (Exception ioe) {
			ioe.printStackTrace();
		}
		return error;
	}
	
	
	
	
}


